home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
macros
/
latex209
/
contrib
/
wright
/
wright.sty
< prev
next >
Wrap
Text File
|
1993-11-07
|
2KB
|
75 lines
%%%%%%%%%%%%%%%%%%%%%%%cut here%%%%%%%%%%%%%%%%%%%%%%%
%% wright.sty--example of how to change LaTeX's \newcommand (and \renewcommand)
%% to define a command with an optional argument.
%% Usage:
%% \newcommand and \renewcommand are backward compatible.
%% To define a command with an optional argument, these commands will take
%% a second optional argument:
%%
%% \newcommand\kilroy[1][\blech]{\foo#1\bar#2\baz}%
%%
%% will define \kilroy to have an optional argument with default value of
%% \blech and expansion \foo#1\bar#2\baz, where the optional argument is #1.
%% NB: the optional argument is the first parameter. You must bear this in
%% mind when using the \newcommand macro.
%% NB: If you wish to define a command that takes an optional argument, but no
%% required arguments, usage is, eg:
%%
%% \newcommand\kilroy[0][\blech]{\foo#1\bar#2\baz}%
%%
%% Implementation:
%% modified commands:
%% \newcommand
%% \renewcommand
%%
%% new commands:
%% \@newcommand
%% \@@newcommand
%% \@@@newcommand
%% \@ifredefinable
%% \@@ifredefinable
%% \@commanddef
%% \@ldef
%% \@hashchar
%% \@macparm
%%
%% commands that change their meaning when these macros are executed:
%% \@@ifredefinable
%% \@macparm
%%
\def\newcommand{\let\@@ifdefinable\@ifdefinable\@newcommand}%
\def\renewcommand{\let\@@ifdefinable\@ifredefinable\@newcommand}%
\def\@newcommand#1{\@ifnextchar[{\@@newcommand#1}{\@@newcommand#1[\z@]}}%
\def\@@newcommand#1[#2]{\@ifnextchar[{\@@@newcommand#1[#2]}{\@@@newcommand#1[#2][]}}%
\long\def\@@@newcommand#1[#2][#3]#4{\@@ifdefinable#1{\@commanddef#1[#2][#3]{#4}}}%
\def\@ifredefinable#1#2{%
\edef\@tempa{\expandafter\@cdr\string#1\@nil}%
\@ifundefined{\@tempa}{\@latexerr{\string#1\space undefined}\@ehc}{}%
\let#1\undefined
\@ifdefinable#1{#2}%
}%
\long\def\@commanddef#1[#2][#3]#4{%
\let#1\relax\@tempcnta#2\def\@tempb{#3}\let\@macparm\relax
\ifx\@tempb\@empty
\@tempcntb\@ne
\edef\@tempa{#1}%
\else
\@tempcntb\tw@
\edef\@tempa{\csname\string#1\endcsname[\@macparm1]}%
\def#1{%
\@ifnextchar[{\csname\string#1\endcsname}{\csname\string#1\endcsname[#3]}%
}%
\fi
\@whilenum\@tempcnta>\z@\do{%
\edef\@tempa{\@tempa\@macparm\the\@tempcntb}%
\advance\@tempcntb\@ne\advance\@tempcnta\m@ne
}%
\let\@macparm\@hashchar\expandafter\@ldef\@tempa{#4}%
}%
\catcode`\?=12\relax
\def\@ldef{\long\def}%
\let\@hashchar#% the macro-parameter catcode